﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using RESTVeterinariaServices.Dominio;
using System.Data.SqlClient;
using System.ServiceModel;

namespace RESTVeterinariaServices.Persistencia
{
    public class PacienteDAO
    {
        ClienteDAO ClienteDAO = new ClienteDAO();

        public Paciente Crear(Paciente objACrear)
        {
            Paciente ObjCreado = null;
            try
            {
                int Pk = 0;
                using (SqlConnection con = new SqlConnection(ConexionUtil.ObtenerCadena()))
                {
                    string query = "SELECT isnull(MAX(IdPaciente)+1,1) FROM Paciente";
                    using (SqlCommand sentencia = new SqlCommand(query, con))
                    {
                        Pk = (int)sentencia.ExecuteScalar();
                    }
                }

                using (SqlConnection con = new SqlConnection(ConexionUtil.ObtenerCadena()))
                {
                    string query = "INSERT INTO Paciente VALUES(@IdPaciente,@IdCliente,@txtPaciente,@IdEstadoPaciente)";
                    objACrear.IdPaciente = Pk;
                    using (SqlCommand com = new SqlCommand(query, con))
                    {
                        com.Parameters.Add(new SqlParameter("@idPaciente", objACrear.IdPaciente));
                        com.Parameters.Add(new SqlParameter("@IdCliente", objACrear.Cliente.idCliente));
                        com.Parameters.Add(new SqlParameter("@txtPaciente", objACrear.txtPaciente));
                        com.Parameters.Add(new SqlParameter("@IdEstadoPaciente", objACrear.IdEstadoPaciente));
                        com.ExecuteNonQuery();
                    }
                }
                ObjCreado = obtener(objACrear.Cliente.idCliente.ToString(),objACrear.IdPaciente.ToString());
                return ObjCreado;
            }

            catch (Exception ex)
            {
                throw ex;
            }
        }

        public Paciente obtener(string IdCliente, string IdPaciente)
        {
            try
            {
                Paciente objEncontrado = null;
                string sql = "SELECT IdPaciente,IdCliente,txtPaciente,IdEstadoPaciente ";
                sql += "FROM Paciente where IdPaciente=@IdPaciente";

                using (SqlConnection con = new SqlConnection(ConexionUtil.ObtenerCadena()))
                {
                    con.Open();
                    using (SqlCommand com = new SqlCommand(sql, con))
                    {
                        com.Parameters.Add(new SqlParameter("@IdPaciente", IdPaciente));
                        using (SqlDataReader res = com.ExecuteReader())
                        {
                            if (res.Read())
                            {
                                int idCliente = (int)res["IdCliente"];
                                objEncontrado = new Paciente()
                                {
                                    IdPaciente = (int)res["idPaciente"],
                                    Cliente = ClienteDAO.obtener(idCliente.ToString()),
                                    txtPaciente = (string)res["txtPaciente"],
                                    IdEstadoPaciente = (int)res["IdEstadoPaciente"]
                                };
                            }
                        }
                    }
                }
                return objEncontrado;
            }

            catch (Exception ex)
            {
                throw ex;
            }
        }

        public List<Paciente> ListarTodos()
        {
            try
            {
                List<Paciente> list = new List<Paciente>();
                string sql = "SELECT IdPaciente,IdCliente,txtPaciente,IdEstadoPaciente FROM Paciente";

                using (SqlConnection con = new SqlConnection(ConexionUtil.ObtenerCadena()))
                {
                    con.Open();
                    using (SqlCommand com = new SqlCommand(sql, con))
                    {
                        using (SqlDataReader res = com.ExecuteReader())
                        {
                            while (res.Read())
                            {
                                int idCliente = (int)res["IdCliente"];
                                Paciente c = new Paciente()
                                {
                                    IdPaciente = (int)res["idPaciente"],
                                    Cliente = ClienteDAO.obtener(idCliente.ToString()),
                                    txtPaciente = (string)res["txtPaciente"],
                                    IdEstadoPaciente = (int)res["IdEstadoPaciente"]
                                };
                                list.Add(c);
                            }
                        }
                    }
                }
                return list;
            }

            catch (Exception ex)
            {
                throw ex;
            }
        }

        public Paciente Modificar(Paciente objAModificar)
        {
            Paciente objModificado = null;
            using (SqlConnection con = new SqlConnection(ConexionUtil.ObtenerCadena()))
            {
                string sql = "UPDATE Paciente ";
                sql += "SET IdCliente = @IdCliente ";
                sql += ",txtPaciente = @txtPaciente ";
                sql += ",IdEstadoPaciente = @IdEstadoPaciente ";
                sql += "WHERE IdPaciente = @IdPaciente";
                using (SqlCommand com = new SqlCommand(sql, con))
                {
                    com.Parameters.Add(new SqlParameter("@IdPaciente", objAModificar.IdPaciente));
                    com.Parameters.Add(new SqlParameter("@idCliente", objAModificar.Cliente.idCliente));
                    com.Parameters.Add(new SqlParameter("@txtPaciente", objAModificar.txtPaciente));
                    com.Parameters.Add(new SqlParameter("@IdEstadoPaciente", objAModificar.IdEstadoPaciente));
                    com.ExecuteNonQuery();
                }
            }
            objModificado = obtener(objAModificar.Cliente.idCliente.ToString(), objAModificar.IdPaciente.ToString());
            return objModificado;
        }

        public List<Paciente> ObtenerXCliente(string IdCliente)
        {
            try
            {
                List<Paciente> list = new List<Paciente>();
                string sql = "SELECT IdPaciente,IdCliente,txtPaciente,IdEstadoPaciente ";
                sql += "FROM Paciente where IdCliente=@IdCliente and IdEstadoPaciente IN (1,3)";

                using (SqlConnection con = new SqlConnection(ConexionUtil.ObtenerCadena()))
                {
                    con.Open();
                    using (SqlCommand com = new SqlCommand(sql, con))
                    {
                        com.Parameters.Add(new SqlParameter("@IdCliente", IdCliente));
                        using (SqlDataReader res = com.ExecuteReader())
                        {
                            while (res.Read())
                            {
                                int idCliente = (int)res["IdCliente"];
                                Paciente c = new Paciente()
                                {
                                    IdPaciente = (int)res["idPaciente"],
                                    Cliente = ClienteDAO.obtener(idCliente.ToString()),
                                    txtPaciente = (string)res["txtPaciente"],
                                    IdEstadoPaciente = (int)res["IdEstadoPaciente"]
                                };
                                list.Add(c);
                            }
                        }
                    }
                }
                return list;
            }

            catch (Exception ex)
            {
                throw ex;
            }
        }
    }
}